﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaDeDominio;

namespace CapaDeNegocio
{
    public interface IAdministracionService
    {
        #region Operaciones del Negocio
            ICollection<Maestra> ListarMaestrosXTabla(String nomtabla);
            Maestra ObtenerTipoDoc (int codigo);
            Usuario ObtenerUsuario ( int codigo );
        #endregion

        #region Metodos de soporte para entidad Local

            ICollection<Local> ListarLocalesXNombre(string nombre);
            Local CrearLocal(Local localACrear);
            Local ObtenerLocal(int codigo);
            Local ModificarLocal(Local localAModificar);
            void EliminarLocal(Local localAEliminar);
            ICollection<Local> ListarLocales();
        #endregion

        #region Métodos de soporte para entidad Cliente
            Cliente RegistrarCliente(string nombres, string apellidos,
                int tip_documento, string nro_documento, string correo, DateTime fec_nacimiento,
                string clave, string clave_validacion, string estado);


            
            ICollection<Cliente> ListarClientes();



          

        #endregion

        #region Métodos de soporte para entidad Servicio
            Servicio RegistrarServicio(string nombre, string descripcion, decimal alquiler);
            ICollection<Servicio> ListarServicios();
            Servicio ObtenerServicio(int codigo);
            ICollection<Sala> ListarSalas(string nombre, int? localCodigo, int? capacidad, string caracteristicas);
        #endregion

        #region Métodos de soporte para entidad Sala
        ICollection<Sala> ListarXFiltros(string nombre, Local local, int Guitarras, bool teclado, int capacidad, Servicio servicioGrab);
            Sala InscribirSala(String nombre, int localCodigo, int capacidad, String caracteristicas);
            void ArmarSala(int codigoSala, decimal alquiler, ICollection<Instrumento> instrumentosBasicos, ICollection<Servicio> serviciosAdicionales);
            Sala ObtenerSala(int codigo);
        #endregion

        #region Métodos de soporte para entidad Reserva
            ICollection<Reserva> ListarSalasReservadasXFechaHora(DateTime fecha, int hora);
            Reserva RegistrarReserva(Reserva ReservaACrear);
            ICollection<Reserva> ConsultaReserva(DateTime fechaReserva, Sala sala);
            void AsignarInstrumentosAdicionalReserva(int codigo, ICollection<Instrumento> instrumentos);
            void AsignarServiciosAdicionalReserva(int codigo, ICollection<Servicio> servicios);
        #endregion

        #region Métodos de soporte para entidad Instrumento
            Instrumento RegistrarInstrumento(int tipo, string marca, string modelo, string caracteristicas,
                int aniofabricacion, decimal alquiler);        
            Instrumento ObtenerInstrumento(int codigo);
            ICollection<Instrumento> ListarInstrumentos();
            Instrumento ModificarInstrumento(Instrumento instrumentoAModificar);
            void EliminarInstrumento(Instrumento instrumentoAEliminar);
        #endregion

            Cliente ObtenerCliente(int codigo);

            Reserva ObtenerReserva(int codigo);
            
            Usuario ValidaLogin(String usuario, String clave);


    }
}
